import Vue from 'vue'
import axios from 'axios'
import {Message} from 'element-ui'
import {baseUrl} from '../../static/baseUrl'
import router from '../router'
Vue.prototype.$axios = axios

axios.create({
  timeout: 60000
})
axios.defaults.baseURL = ''
// request interceptor
axios.interceptors.request.use(config => {
  const token = localStorage.getItem('Access-Token')
  if (token) {
    config.headers['Access-Token'] = token
  }
  const imgKey = localStorage.getItem('imgKey')
  if(imgKey){
    config.headers['Captcha-Key'] = imgKey;
    config.headers['Captcha-Code'] = localStorage.getItem('imgCode');
    localStorage.removeItem('imgKey')
    localStorage.removeItem('imgCode')
  }
  return config
}, (err) => {
  Message.error('请求异常,' + err)
})
axios.interceptors.response.use((res) => {

  if (res.status === 200) {
    const responseData = res.data
    if (responseData.returnCode) {
      if (responseData.returnCode == '000000') {
        return responseData
      } else {
        Message.closeAll()
        Message.error('服务器处理异常,Error:' + responseData.returnMsg)
      }
      return false
    }
    if (responseData.code == 200) {
      return responseData
    } else if (responseData.code === 401) {
      localStorage.removeItem('Access-Token')
      router.push({ path: '/login' })
      Message.closeAll()
      Message.error('登录已失效，请重新登录')
    } else {
      console.log(res.data.msg)
      const ms = responseData.message ? responseData.message : res.data.msg
      Message.closeAll()
      Message.error('服务器处理异常,Error:' + ms)
    }
  } else {
    Message.closeAll()
    Message.error('服务器通信异常,Error:' + res.message || res.msg)
  }
}, (err) => {
  Message.closeAll()
  Message.error('服务器异常,' + err)
})
function post (apiUrl, parameter, success, error) {
  parameter = parameter || {}
  parameter.gid = localStorage.getItem('Access-Token')
  parameter.createUser = localStorage.getItem('User_Name')
  axios({
    url: apiUrl,
    method: 'post',
    data: parameter
  }).then(res => {
    if (res) {
      console.log(res)
      if (res.returnCode) {
        if (res.returnCode == '000000') {
          success && success(res || res)
        } else {
          Message.closeAll()
          Message.error(res.returnMsg)
          error && error(res)
        }
        return false
      }
      if (res.code === 200) {
        success && success(res || res)
      } else {
        Message.closeAll()
        Message.error(res.message || res.msg)
        error && error(res)
      }
    } else {
      error && error(res)
    }
  }).catch(err => {
    Message.closeAll()
    Message.error('业务异常，Error:' + err)
    error && error(err)
  })
}
function get (apiUrl, parameter, success, error) {
  parameter = parameter || {}
  parameter.gid = localStorage.getItem('Access-Token')
  axios.get(apiUrl, { params: parameter }).then(res => {
    if (res) {
      if (res.code === 200) {
        success && success(res || res)
      } else {
        Message.closeAll()
        Message.error(res.message || res.msg)
        error && error(res)
      }
    } else {
      error && error(res)
    }
  }).catch(err => {
    Message.closeAll()
    Message.error('业务异常，Error:' + err)
    error && error(err)
  })
}
function put (apiUrl, parameter, success, error) {
  parameter = parameter || {}
  parameter.gid = localStorage.getItem('Access-Token')
  parameter.updateUser = localStorage.getItem('User_Name')
  axios.put(apiUrl, parameter).then(res => {
    if (res) {
      if (res.code === 200) {
        success && success(res || res)
      } else {
        Message.closeAll()
        Message.error(res.message || res.msg)
        error && error(res)
      }
    } else {
      error && error(res)
    }
  }).catch(err => {
    Message.closeAll()
    Message.error('业务异常，Error:' + err)
    error && error(err)
  })
}
function dele (apiUrl, parameter, success, error) {
  parameter = parameter || {}
  parameter.gid = localStorage.getItem('Access-Token')
  axios.delete(apiUrl, { params: parameter }).then(res => {
    if (res) {
      if (res.code === 200) {
        success && success(res || res)
      } else {
        Message.closeAll()
        Message.error(res.message || res.msg)
        error && error(res)
      }
    } else {
      error && error(res)
    }
  }).catch(err => {
    Message.closeAll()
    Message.error('业务异常，Error:' + err)
    error && error(err)
  })
}
export default {
  post,
  get,
  put,
  dele
}
